const Koa = require('koa')
const Router = require('@koa/router')
const { koaBody } = require('koa-body')
const cors = require('koa2-cors')
const koaStatic = require('koa-static')

const app = new Koa()
const router = new Router()
const { port, serviceUrl } = require('./config/app')
const errorHandler = require('./middlewares/errorHandler')
const koaJwt = require('./middlewares/koaJwtToken')
const loadRoutes = require('./routes/loadRoutes')
const { verifyToken } = require('./utils/jwtToken')
const path = require('path')

loadRoutes(router)

app
  .use(cors()) // 使用 cors 中间件
  .use(koaStatic(path.join(__dirname, 'static'), {
    // 配置静态文件服务选项
    hidden: true, // 不允许访问隐藏文件
    gzip: true // 启用 gzip 压缩
  }))
  .use(koaBody({ // 使用 koa-body 中间件
    multipart: true,  // 支持文件上传
    formidable: {     // 配置文件上传
      uploadDir: path.join(__dirname, 'static/temp_images'), // 临时存储路径
      keepExtensions: true, // 保留文件扩展名
      onFileBegin: (name, file) => {
        file.filepath = path.join(__dirname, 'static/temp_images', file.originalFilename);
        console.log('文件上传信息:', name, file);
      },
    }
  })) 
  .use(errorHandler)
  .use(verifyToken) // 验证 token
  .use(koaJwt) // 注意：放在路由前面
  .use(router.routes())
  .use(router.allowedMethods())

app.listen(port, '0.0.0.0', () => {
  console.log(`server is running at ${serviceUrl}:${port}`)
})
